function GUIBuildCodonFrequencies (EFV)
{
	result = {ModelMatrixDimension,1};
	HarvestFrequencies (Model_EFV_Vector,Data_Set_ID,3,3,1);
	MULTIPLY_BY_FREQS = 0;
	return result;
}

/** MATRIX MODIFICATION CODE **/

EFVModifierMatrix = {ModelMatrixDimension,ModelMatrixDimension}; 
hshift = 0;

for (h=0; h<64; h=h+1)
{
	if (ModelGeneticCode[h]==10) 
	{
		hshift = hshift+1;
		continue; 
	}
	vshift = hshift;
	for (v = h+1; v<64; v=v+1)
	{
		diff = v-h;
		if (ModelGeneticCode[v]==10) 
		{
			vshift = vshift+1;
			continue; 
		}
	  	if ((h$4==v$4)||((diff%4==0)&&(h$16==v$16))||(diff%16==0))
	  	{
	  		if (h$4==v$4)
	  		{
	  			transition = v%4;
	  			transition2= h%4;
	  		}
	  		else
	  		{
	  			if(diff%16==0)
	  			{
	  				transition = v$16;
	  				transition2= h$16;
	  			}
	  			else
	  			{
	  				transition = v%16$4;
	  				transition2= h%16$4;
	  			}
	  		}
	  		if (transition==0) 
	  		{
	  			EFVModifierMatrix[h-hshift][v-vshift] := "EFV__[0]";
		  	}
		  	else
		  	{
		  		if (transition==1) 
		  		{
		  			EFVModifierMatrix[h-hshift][v-vshift] := "EFV__[1]";
			  	}		  	
			  	else
			  	{
			  		if (transition==2) 
			  		{
			  			EFVModifierMatrix[h-hshift][v-vshift] := "EFV__[2]";
				  	}		  	
				  	else
			  		{
			  			EFVModifierMatrix[h-hshift][v-vshift] := "EFV__[3]";
				  	}		  	
				  	
			  	}
		  	}
	  		if (transition2==0) 
	  		{
	  			EFVModifierMatrix[v-vshift][h-hshift] := "EFV__[0]";
		  	}
		  	else
		  	{
		  		if (transition2==1) 
		  		{
		  			EFVModifierMatrix[v-vshift][h-hshift] := "EFV__[1]";
			  	}		  	
			  	else
			  	{
			  		if (transition2==2) 
			  		{
			  			EFVModifierMatrix[v-vshift][h-hshift] := "EFV__[2]";
				  	}		  	
				  	else
			  		{
			  			EFVModifierMatrix[v-vshift][h-hshift] := "EFV__[3]";
				  	}		  	
				  	
			  	}
		  	}
	  	}
    }
}


